package slidingwindow;

import java.util.Arrays;

public class LengthOfLongestSubstring {
    //无重复字符的最长子串
    public static void main(String[] args) {
        String s = "pwwkew";
        LengthOfLongestSubstring l = new LengthOfLongestSubstring();
        System.out.println(l.lengthOfLongestSubstring(s));
    }
    public int lengthOfLongestSubstring(String s) {
        int hash[] = new int[128];
        int ret = 0;
        char[] ss = s.toCharArray();
        for (int right = 0, left = 0; right < s.length(); right++) {
            hash[ss[right]]++;
            while(hash[ss[right]] > 1) {
                hash[ss[left++]]--;
            }
            ret = Math.max(ret,right-left+1);
        }
        return ret;
    }








//    public int lengthOfLongestSubstring(String s) {
//        char[] ss = s.toCharArray();
//      int n = s.length(),left = 0, right = 0;
//      int ret = 0;
//      int[] hash = new int[128];
//       while(right < n) {
//           //进窗口
//          hash[ss[right]]++;
//          //判断
//           while(hash[ss[right]] > 1) {
//               hash[ss[left++]]--;
//           }
//               ret = Math.max(ret,right - left +1);
//               right++;
//       }
//       return ret;
//    }

  //  public int lengthOfLongestSubstring1(String s) {
//        int len = 0;
//        int[] hash = new int[128];
//        if (s.length() == 1) {
//            return 1;
//        }
//        for (int i = 0; i < s.length() ; i++) {
//            for (int j = i; j < s.length(); j++) {
//                if (hash[s.charAt(j)] > 1) {
//                    break;
//                }
//               len = Math.max(j - i +1,len);
//            }
//
//        }
//        return len;
//        public int lengthOfLongestSubstring1(String s) {
//            int len = 0, start = 0;
//            int[] hash = new int[128]; // 假设输入只包含ASCII字符
//            Arrays.fill(hash, -1); // 初始化为-1，表示字符尚未出现
//
//            for (int i = 0; i < s.length(); i++) {
//                int index = s.charAt(i);
//                // 如果字符在之前的窗口中出现过，则更新窗口的起始位置
//                if (hash[index] >= start) {
//                    start = hash[index] + 1;
//                }
//                // 更新字符最后出现的位置
//                hash[index] = i;
//                // 计算当前窗口的长度并更新最长长度
//                len = Math.max(len, i - start + 1);
//            }
//            return len;
//        }

}
